Работа с Git
Бансимба К. Д.
Российский университет дружбы народов, Москва, Россия
20/02/2025
Приобрести практические навыки работы с системой управления версиями Git.
Создать репозиторий
Изменить его содержимое, изучить работу с коммитами, версиями и тегами
Поработать с объектами Git
Создать дополнительную ветку, провести слияние, разрешение конфликтов
Создать клон репозитория и слить его с оригинальным
Залить и извлечь изменения
Если вы никогда ранее не использовали git, для начала вам необходимо осуществить установку. Выполните следующие команды, чтобы git узнал ваше имя и электронную почту.
Сначала настроим core.autocrlf с параметрами true и input, чтобы сделать все переводы строк текстовых файлов в главном репозитории одинаковыми, а затем настроим отображение unicode.
Создадим пустой каталог hello, а в нём файл с именем hello.html. Затем создадим git репозиторий из этого каталога, выполнив команду git init.
Добавим файл в репозиторий и проверим статус, который сообщает, что коммитить нечего.
Изменим содержимое файла hello.html на:
) к странице «Hello, World».
Проверив текущий статус увидим, что hello.html указан дважды в состоянии.
Получим список произведенных изменений: git log
Однострочный формат истории: git log –pretty=oneline Есть много вариантов отображения лога.
Изучим данные лога и найдем там хэш первого коммита, используя его вернемся к первой верссии и просмотрим файл hello.html, действительно, увидим первую версию. Затем вернемся к последней версии в ветке master и вновь посмотрим на файл
Назовем текущую версию страницы hello первой (v1). Создадим тег первой версии и используем его для того чтобы венуться к предыдущей, которой также присвоим тег.
Переключимся по тегам между двумя отмеченными версиями. Просмотрим все доступные теги(их два) и посмотрим теги в логе.
Убдеимся, что мы находимся на последнем коммите ветки master.
и внесем изменение в файл hello.html в виде нежелательного комментария.
Затем проверим статус, увидим, что изменения ещё не проиндексированы.
Используем команду git checkout для переключения версии файла hello.html в репозитории.
Внесем изменение в файл hello.html в виде нежелательного комментария
Проиндексируем это изменение и проверим состояние. git status
Изменим файл hello.html на следующий
Проверим лог. Проверка лога показывает нежелательные и отмененные коммиты в наш репозиторий.
Удалим последние два коммита с помощью сброса, сначала отметим последний коммит тегом, чтобы его можно было потом найти. Используем команду git reset, чтобы вернуться к версии до этих коммитов.
Теперь в логе их нет, но если посмотреть логи с опцией –all можно всё ещё их увидеть, но метка HEAD находится на нужной нам версии.
Удалим тег oops и коммиты, на которые он ссылался, сборщиком мусора. Теперь этот тег не отображается в репозитории.
Добавим в страницу комментарий автора.
комментарий должен включать электронную почту автора.
git log
Переместим наш файл в каталог lib. Для этого создадим его и используем команду git mv, сделаем коммит этого пермещения.
Добавим файл index.html в наш репозиторий.
Добавим файл и сделаем коммит.
Теперь при открытии index.html, увидим кусок страницы hello в маленьком окошке .
ls -C .git Это каталог, в котором хранится вся информация git.
ls -C .git/objects
cat .git/config Это файл конфигурации, создающийся для каждого конкретного проекта. Записи в этом файле будут перезаписывать записи в файле.
cat .git/HEAD Файл HEAD содержит ссылку на текущую ветку, в данный момент это должна быть ветка master.
Найдем последний коммит и выедем его с помощью SHA1 хэша.
Создадим новую ветку «style» и перейдем в неё.
добавим файл стилей style.css
Обновим файл hello.html
Посмотрим все логи.
Вернемся в основную ветку и добавим файл README.md. Просмотрим ветки и их различия.
Сделайте коммит изменений README.md в ветку master.
для просмотра веток и их отличий.
Слияние переносит изменения из двух веток в одну. Вернемся к ветке style и сольем master с style.
Вернемся в ветку master и создадим конфликт, внеся изменения в файл hello.html.
Просмотрим ветки. После коммита «Added README» ветка master была объединена с веткой style, но в настоящее время в master есть дополнительный коммит, который не был слит с style.
Вернемся к ветке style и попытаемся объединить ее с новой веткой master.
Внесем изменения в lib/hello.html, оставив только необходимую нам запись.
добавим этот файл в репозиторий, чтобы вручную разрешить конфликт.
Вернемся на ветке style к точке перед тем, как мы слили ее с веткой master.
Мы видим, что коммит «Updated index.html» был последним на ветке style перед слиянием. Сбросим ветку style к этому коммиту.
Поищим лог ветки style. Увидим, что у нас в истории больше нет коммитов слияний.
Добавив интерактивный режим в ветку master, мы внесли изменения, конфликтующие с изменениями в ветке style.
Коммит «Added README» идет непосредственно перед коммитом конфликтующего интерактивного режима.
Используем команду rebase вместо команды merge.
Вернемся в ветку master и сольем ветку style в неё с помощью команды git merge.
Теперь ветки style и master идентичны.
Перейдем в наш рабочий каталог и сделаем клон репозитория hello.
Клонированный репозиторий знает об имени по умолчанию удаленного репозитория. Посмотрим, подробную информацию об имени по умолчанию.Для того, чтобы увидеть все ветки используем опцию -a.
Посмотрим на ветки, доступные в нашем клонированном репозитории.
Для того, чтобы увидеть все ветки.
Внесем изменения в файл README.md. Затем добавим их в репозиторий.
Перейдём в клон репозитория и используем команду git fetch.
Мы можем продемонстрировать, что клонированный файл README.md не изменился.
Сольем внесённые изменения в главную ветку.
Добавим локальную ветку, которая отслеживает удаленную ветку.
добавим репозиторий hello.git к нашему оригинальному репозиторию.
Так как чистые репозитории, как правило, расшариваются на каком-нибудь сетевом сервере, нам необходимо отправить наши изменения в другие репозитории.
Начнем с создания изменения для отправки. Отредактируем файл README.md и сделаем коммит, затем отправим изменения в общий репозиторий
Затем извлечем изменения из общего репозитория.
В процессе выполнения данной лабораторной работы я приобрел практические навыки работы с Git.